home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).adf
/
Papier.Schere
/
PSS.LST
< prev
next >
Wrap
File List
|
1992-04-18
|
16KB
|
491 lines
' **********************************
' * Papier, Schere und Stein V1.0 *
' * © 20.3.1992 by Henry König *
' * 2 Hamburg 53, Bornheide 71 *
' **********************************
init
menueein
info
programmkopf
anweisung(1)
ON MENU GOSUB menÜkontrolle
REPEAT !
SLEEP
UNTIL ende!
CLOSEW #1
CLOSES 1
END ! system
PROCEDURE abfrage.ja
y$="J"
abfragen
RETURN
PROCEDURE abfrage.nein
y$="N"
abfragen
RETURN
PROCEDURE abfragen
anweisung(aw%)
anweisung(18)
CLR x%
mausk%=0
ay%=ay%(aw%)+5+LEN(aw$(aw%))
ay%=ay%*8-16 ! Rechtswert
ax%=ax%(aw%)*8-12 ! Hochwert
COLOR 2 ! schwarz
BOX ay%,ax%,ay%+64,ax%+14
COLOR 4 ! hellgrau
LINE ay%+1,ax%+1,ay%+63,ax%+1
LINE ay%,ax%+1,ay%,ax%+14
WHILE mausk%<>2 AND x%<>13
IF y$="J" THEN
COLOR 2
LOCATE ay%(aw%)+5+LEN(aw$(aw%)),ax%(aw%)
textstil(7,3,6) ! Invers
PRINT " J ";
textstil(0,1,0) ! Invers aus
PRINT " N ";
y$="J"
ELSE
LOCATE ay%(aw%)+5+LEN(aw$(aw%)),ax%(aw%)
textstil(0,1,0) ! Invers aus
PRINT " J ";
textstil(7,3,6) ! Invers
PRINT " N ";
y$="N"
ENDIF
taste
IF x%=155 ! Sondertaste
x%=ASC(MID$(x$,2,1)) ! ASCII-Wert
IF x%=63 THEN ! Help-Taste?
textstil(0,1,0) ! Invers ausschalten
ENDIF
ENDIF
IF UPPER$(x$)="J" THEN
y$="J"
ELSE IF UPPER$(x$)="N"
y$="N"
ENDIF
IF mausy%=ax%(aw%) THEN ! Abfragefeld (Zeile) angeklickt?
IF mausx%-1>ay%(aw%)+3+LEN(aw$(aw%)) AND mausx%-1<ay%(aw%)+8+LEN(aw$(aw%)) THEN
y$="J"
ELSE IF mausx%-1>ay%(aw%)+7+LEN(aw$(aw%)) AND mausx%-1<ay%(aw%)+11+LEN(aw$(aw%))
y$="N"
ENDIF
ELSE
x1%=ASC(MID$(x$,2,1))-37
IF x1%=30 THEN ! Cursor rechts?
y$="N" ! ja, dann nein gewahlt
ELSE IF x1%=31 ! Cursor links?
y$="J" ! ja, dann ja gewahlt
ENDIF
ENDIF
WEND
textstil(0,1,0) ! Invers aus
programmfuss
RETURN
PROCEDURE anweisung(aw%)
PRINT AT(4,ax%(aw%));SPACE$(74) ! Zeile löschen
PRINT AT(ay%(aw%),ax%(aw%));aw$(aw%) ! Anweisung ausgeben
RETURN
PROCEDURE beenden ! Programm beenden
ALERT 0,"Wollen Sie aufhören",1,"Ende|Weiter",wahl%
ende!=(wahl%=1)
RETURN
PROCEDURE lese.umenue(un%)
FOR jj%=1 TO un%
READ uy%(jj%),ux%(jj%),ux$(jj%)
NEXT jj%
RETURN
PROCEDURE menÜausgeben ! Untermenü anzeigen
IF um%<1 OR um%>un% THEN ! Menüpunkt außerhalb des Bereiches
um%=1 ! ja, dann Menuepunkt = 1
ENDIF
COLOR 4 ! hellgrau
LINE 16,(28*8)-12,633-12,(28*8)-12 ! Linie
COLOR 2
LINE 16,(28*8)+2,633-12,(28*8)+2
FOR jj%=1 TO un% ! Menüs anzeigen
COLOR 4 ! hellgrau
LINE uy%(jj%)*8-12,ux%(jj%)*8-12,uy%(jj%)*8-12,ux%(jj%)*8+1
PCOLOR 5,0
PRINT AT(uy%(jj%),ux%(jj%));ux$(jj%)
PCOLOR 1,0
NEXT jj%
LOCATE uy%(um%),ux%(um%)
textstil(7,3,6) ! Menüpunkt invers darstellen
PRINT ux$(um%)
textstil(0,1,0) ! Invers aus
RETURN
PROCEDURE menÜkontrolle ! Hauptmenü
mn%=MENU(0) ! Menüpunkt
SELECT mn%
CASE 1
info ! Info ausgeben
CASE 2
spielen ! Spiel starten
CASE 3
beenden ! Programm beenden
ENDSELECT
programmkopf
anweisung(1)
RETURN
PROCEDURE menÜkontrolle1 ! Datenpflegemenü
anweisung(aw%)
WHILE mausk%<>2 AND x%<>13
menÜausgeben
taste
IF mausy%=28 THEN
menÜnummer
ELSE IF x%<>13
x%=ASC(MID$(x$,2,1))-37
IF x%=30 ! Cursor rechts
INC um%
ELSE IF x%=31 ! Cursor links
DEC um%
ENDIF
IF um%<1 THEN
um%=un%
ELSE IF um%>un%
um%=1
ENDIF
ENDIF
FOR j1%=1 TO un%
IF LEFT$(x$,1)=MID$(ux$(j1%),1,1) THEN
um%=j1%
ENDIF
NEXT j1%
WEND
CLR x%
RETURN
PROCEDURE menÜnummer ! Menünummer des angekl. Menüpkt. berechn.
FOR jj%=1 TO un%
IF mausx%>=uy%(jj%) AND mausx%<=uy%(jj%)+LEN(ux$(jj%)) THEN ! Spalte
um%=jj%
ENDIF
NEXT jj%
RETURN
PROCEDURE programmkopf
CLS
COLOR 2 ! schwarze Box
PBOX 1,1,639,20
COLOR 0 ! grau
PBOX 6,4,633,17
COLOR 4 ! hellgrau
LINE 6,4,633,4
LINE 6,4,6,17
PCOLOR 5,0
PRINT AT(20,2);"Papier, Schere und Stein. Version 1.00"
PCOLOR 1,0
programmfuss
RETURN
PROCEDURE programmfuss ! Anweisungsboxen zeichnen
COLOR 2 ! schwarz
PBOX 1,(27*8)-10,639,(32*8) ! schwarze Box
COLOR 0 ! grau
PBOX 6,(27*8)-7,633,(28*8)+4 ! graue Box
PBOX 6,(29*8)+2,633,(32*8)-4 ! 2. graue Box
COLOR 4 ! hellgrau
BOX 7,(27*8)-7,633,(32*8)-3
LINE 7,(29*8)+2,633,(29*8)+2
LINE 16,(29*8)-6,639-16,(29*8)-6
LINE 16,(29*8)+5,639-16,(29*8)+5
LINE 639-16,(29*8)-6,639-16,(26*8)+4 ! senkrechter Strich
LINE 16,(29*8)+5,16,(31*8)+2 ! senkrechter Strich
COLOR 2 ! schwarz
LINE 7,(32*8)-3,633,(32*8)-3 ! schwarze Linie
LINE 633,(27*8)-7,633,(32*8)-3
LINE 16,(27*8)-4,639-16,(27*8)-4
LINE 16,(31*8)+2,639-16,(31*8)+2
LINE 16,(29*8)-6,16,(26*8)+4 ! senkrechter Strich
LINE 639-16,(29*8)+5,639-16,(31*8)+2 ! senkrechter Strich
RETURN
PROCEDURE taste ! ein Zeichen von der Tastatur holen
CLR x% ! Steuerzeichen löschen
CLR mausk%
CLR mausx% ! Mausspalte löschen
CLR mausy% ! Mauszeile löschen
WHILE x%=0 AND MOUSEK=0
x$=INKEY$ ! Zeichen von Tastatur
x%=ASC(x$) ! ASCII-Wert für Auswertung
WEND
IF MOUSEK<>0 THEN ! linke Maustaste
mausx%=INT(MOUSEX/8)+1 ! ja, dann Spalte = mausx
mausy%=INT(MOUSEY/8)+1 ! Zeile = mausy
mausk%=MOUSEK ! Maustaste
ENDIF
RETURN
PROCEDURE tastendruck
PRINT AT(4,28);SPACE$(74);
PCOLOR 5,0
PRINT AT(18,28);" Weiter mit beliebiger Taste oder Mausklick."
GOSUB taste
PCOLOR 1,0
PRINT AT(4,28);SPACE$(74)
RETURN
PROCEDURE textstil(stil%,vfarbe%,hfarbe%)
par$=STR$(stil%)+";"+STR$(30+vfarbe%)+";"+STR$(40+hfarbe%)
PRINT CHR$(&H9B);par$;CHR$(&H6D);
RETURN
PROCEDURE init.variable
DIM ax%(at%),ay%(at%),aw$(at%)! Anweisungstexte und Position
DIM menue$(40) ! Anzahl der Menüs
DIM ux%(un%),uy%(un%),ux$(un%)! Eingabe-Menüs
RETURN
PROCEDURE menueein ! Menüs einschalten
MENU KILL
RESTORE menue.daten
FOR menue%=0 TO 50
READ x$
EXIT IF x$="*"
menue$(menue%)=x$
NEXT menue%
DEC menue% !
menue$(menue%+6)=""
menue$(menue%+7)=""
MENU menue$()
RETURN
PROCEDURE daten ! Daten für Menüs und Anweisungen
um1:
DATA 4,28," Papier "
DATA 18,28," Schere "
DATA 32,28," Stein "
DATA 46,28," Ende "
DATA 60,28," Spielstärke "
'
DATA 31, 5,"Variable Anweisung",0
DATA 31, 4,"Bitte wählen Sie einen Menüpunkt. © 1992 (20.3.92) by Henry König",1
DATA 31, 4,"Anwahl = linke Maustaste, Cursor. Start = rechte Maustaste, RETURN",2
DATA 28,20,"",3
DATA 28,10,"",4
DATA 28, 4,"",5
um2:
menue.daten:
DATA " Projekt "
DATA "+I Info "
DATA " Spiel starten "
DATA "+Q Programm beenden "
DATA ""
DATA "*"
RETURN
PROCEDURE farben.setzen
SETCOLOR 0,5,5,5 ! grau statt blau
SETCOLOR 1,15,15,15 ! weiß bleibt
SETCOLOR 2,0,0,0 ! schwarz erhalten
SETCOLOR 3,15,5,0 ! rot bleibt
SETCOLOR 4,10,10,10 ! hellgrau inverse Farbe im Filerequester
SETCOLOR 5,15,15,0 ! gelb
SETCOLOR 6,0,0,0 ! schwarz = Inverse Farbe im Filerequester
RETURN
PROCEDURE info
programmkopf
PCOLOR 5,0
PRINT AT(1,5);"Papier, Schere und Stein";
PCOLOR 1,0
PRINT " ist ein einfaches Knobelspiel."
PRINT AT(1,7);"Während Sie Papier, Schere oder Stein wählen habe ich bereits gewählt."
PRINT AT(1,9);"Ich mogel nicht! Aus dem gesamten Spielverlauf berechne ich nach der"
PRINT AT(1,11);"Wahrscheinlichkeit Ihre nächste Auswahl."
PRINT AT(1,13);"Die Spielregeln:"
PRINT AT(1,15);"Das Papier umwickelt den Stein."
PRINT AT(1,17);"Die Schere zerschneidet das Papier."
PRINT AT(1,19);"Der Stein schleift die Schere."
PRINT AT(1,21);"Gleiche Auswahl ist ein Unentschieden."
PCOLOR 3,0
PRINT AT(10,23);"(c) 1992 by Henry König, Bornheide 71, 2000 Hamburg 53"
PCOLOR 1,0
PRINT AT(1,25);"Dieses Programm darf kopiert und in jede PD-Serie übernommen werden."
tastendruck
RETURN
PROCEDURE init ! Programm initialisieren
' ON ERROR GOSUB fehler
MODE 0
un%=5 ! Anzahl der Datenpflegemenüs
at%=5 ! Anzahl der Anweisungen
sz%=4 ! Startzeile der Bildschirmausgabe
hist$=""
CLR htot% ! Spieler löschen
CLR ctot% ! Computer löschen
breite%=640 ! Screenbreite
hoehe%=256 ! Screenhöhe
ebenen%=3 ! 3 Bitplanes
OPENS 1,0,0,breite%,hoehe%,ebenen%,&H8000
OPENW #1,0,0,breite%,hoehe%,&H18,&H1800,1
farben.setzen ! Farbpalette setzen
LPOKE ADD(FindTask(0),184),WINDOW(1)! Requester auf GFA-Screen umlenken
init.variable ! Variable initialisieren
lese.umenue(un%)
FOR j%=0 TO at%
READ ax%(j%),ay%(j%),aw$(j%),dummy%
NEXT j%
RETURN
PROCEDURE spielen !
spielstaerke%=1 ! Spielstärke mit Lernmodus
programmkopf
WHILE NOT ende! !
PCOLOR 5,0 ! gelb
PRINT AT(20,6);"Spielstärke ";spielstaerke%
PCOLOR 1,0 ! weiß
IF spielstaerke%=1 THEN ! Spielstärke mit Lernmodus
lernmodus ! ja, dann Auswahl mit Lernmodus
ELSE ! einfache Spielstärke
auswahl ! Auswahl per Zufall
ENDIF
i$="" ! Eingangswert für die Schleife
WHILE i$="" OR INSTR("psf",i$)=0
CLR mausk% ! letzten Mausdruck löschen
aw%=2 ! Anweisung zur Steuerung ausgeben
menÜkontrolle1 ! Untermenü anzeigen
SELECT um% ! Nummer des Menüpunktes
CASE 1
i$="p" ! Papier gewählt
w$="Papier"
CASE 2
i$="s" ! Schere
w$="Schere"
CASE 3
i$="f" ! Stein
w$="Stein"
CASE 4
beenden ! Programm beenden
IF ende! THEN ! Ende gewählt
CLOSEW #1 ! Fenster schließene
CLOSES 1 ! Screen schließen
END ! system
ENDIF
CASE 5
spielstaerke ! Spielstärke abfragen
CLR um% ! Menüpunkt löschen
ENDSELECT
WEND
programmfuss
IF um%>0 THEN ! gültige Auswahl
PRINT AT(2,10);"Bevor Du ";
PCOLOR 5,0
PRINT w$;
PCOLOR 1,0
PRINT " gewählt hast, habe ich ";
PCOLOR 5,0
PRINT c$;
PCOLOR 1,0
PRINT " gewählt."
h$=h$+UPPER$(m$)+i$ ! Auswahl merken
x$=i$+m$
PRINT AT(2,12);SPACE$(77) !
IF m$=i$ THEN
PRINT AT(2,12);"Unendschieden"
ELSE
IF x$="sp" OR x$="pf" OR x$="fs" THEN
INC spkt% ! Spielerpunkte addieren
PRINT AT(2,12);"Du gewinnst"
ELSE
INC cpkt% ! Computerpunkte addieren
PRINT AT(2,12);"Ich gewinne"
ENDIF
ENDIF
PRINT AT(2,14);"Ich habe ";
PCOLOR 5,0
PRINT cpkt%;
PCOLOR 1,0
PRINT " Punkte. Du hast ";
PCOLOR 5,0
PRINT spkt%;
PCOLOR 1,0
PRINT " Punkte."
ENDIF
WEND
RETURN
PROCEDURE lernmodus ! Auswahl berechnen
CLR p% ! Papier löschen
CLR st% ! Stein löschen
CLR s% ! Schere löschen
tf%=1 ! Tiefe
lg%=LEN(h$) ! Länge der Zugvariable
fertig%=FALSE ! Eingangswert für die Schleife
WHILE NOT fertig%
IF tf%<=lg% THEN
su$=RIGHT$(h$,tf%) ! Suchzeichenfolge
i%=1 ! 1. Zeichen des Vergleichstrings
CLR pt% ! Papierzähler löschen
CLR ft% ! Steinzähler löschen
CLR sc% ! Schrenzähler löschen
gefunden%=FALSE ! Eingangswert für die Schleife
WHILE NOT gefunden%
x%=INSTR(i%,h$,su$) ! Position im Vergleichstring
IF x%>0 AND (x%<>lg%-tf%+1) THEN
x$=MID$(h$,x%+tf%+1,1)! Spielart merken
IF x$="p" THEN ! Papier
INC pt% ! Papierzähler plus 1
ELSE IF x$="s" ! Schere
INC sc% ! Scherenzähler plus 1
ELSE IF x$="f" ! Stein
INC ft% ! Steinzähler plus 1
ELSE ! keine Erkennung
auswahl ! dann per Zufall auswählen
ENDIF
i%=x%+1 ! Position im Vergleichsstring
ELSE !
gefunden%=TRUE ! Schleife abbrechen
ENDIF
WEND
IF pt%+sc%+ft%=0 THEN ! keine Spielzüge gefunden
fertig%=TRUE ! dann aufhören
ELSE
INC tf% ! Tiefe plus 1
p%=pt% ! Papier
s%=sc% ! Schere
st%=ft% ! Stein
ENDIF
ELSE
fertig%=TRUE ! dann aufhören
ENDIF
WEND
IF st%=0 AND s%=0 AND p%=0 THEN! keine Ableitung aus den Spielzügen
o$="s" ! annehmen, daß der Spieler Schere wählte
IF RND(99)>0.5 THEN ! Spielerzug per Zufall ermitteln
o$="p" ! annehmen, daß der Spieler Papier wählte
ELSE IF RND(99)>0.5 ! Spielerzug per Zufall ermitteln
o$="f" ! annehmen, daß der Spieler Stein wählte
ENDIF
ELSE ! Spielzüge des Spielers auswerten
IF st%>s% AND st%>=p% THEN ! mehr Steine als Schere und Papier?
o$="f" ! ja, dann für den Spieler Steinwahl annehmen
m$="p" ! dann nehme ich Papier zum Einwickeln
c$="Papier"
ELSE IF p%>=s% AND p%>=st% ! mehr Papier als Schere und Stein?
o$="p" ! ja, dann für den Spieler Papierwahl annehmen
m$="s" ! dann nehme ich Schere zum Zerschneiden
c$="Schere"
ELSE !
o$="s" ! nein, dann annehmen der Spieler wählte Schere
m$="f" ! dann nehme ich den Stein zum Schleifen
c$="Stein"
ENDIF
ENDIF
RETURN
PROCEDURE spielstaerke ! Spielstärke abfragen
programmfuss ! Menüs löschen
spielstaerke%=-1 ! Eingangswert für die Schleife
WHILE spielstaerke%<0 OR spielstaerke%>1
PRINT AT(4,28);"0 = gleiche Chancen, 1 = Computer mit Lernmodus."
PRINT AT(4,31);"Spielstärke 0 oder 1 ";
INPUT x$
spielstaerke%=VAL(x$) ! Spielstärke umwandeln
WEND
programmfuss ! Menüs löschen
RETURN
PROCEDURE auswahl ! Auswahl per Zufall
o$="s" ! annehmen, daß der Spieler Schere wählte
m$="f" ! dann nehme ich den Stein zum Schleifen
c$="Stein"
IF RND(99)>0.5 THEN ! Spielerzug per Zufall ermitteln
o$="p" ! annehmen, daß der Spieler Papier wählte
m$="s" ! dann nehme ich Schere zum Zerschneiden
c$="Schere"
ELSE IF RND(99)>0.5 ! Spielerzug per Zufall ermitteln
o$="f" ! annehmen, daß der Spieler Stein wählte
m$="p" ! dann nehme ich Papier zum Einwickeln
c$="Papier"
ENDIF
RETURN
REM